package cn.edu.ctbu.jpatest.service;

import cn.edu.ctbu.jpatest.dao.CourseRepository;
import cn.edu.ctbu.jpatest.dao.SCRepository;
import cn.edu.ctbu.jpatest.dao.StudentRepository;
import cn.edu.ctbu.jpatest.entity.SC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author xiaopeng
 * @version 1.0
 */
@Service
public class SCService {
    @Autowired
    private SCRepository scRepository;

    @Autowired
    private StudentRepository studentRepository;

    @Autowired
    private CourseRepository courseRepository;

    /**
     * 查询所有选课信息
     * @return
     */
    public List<SC> findAll(){
        return scRepository.findAll();
    }

    public List<String> findSCMsgDetails(){
        List<SC> scList = scRepository.findAll();
        Map<String,List<String>> scMsgMap = new HashMap<>();

        // 遍历 SC 表，整理学生的选课信息
        for(SC sc : scList){
            String sno = sc.getSno();
            String cno = sc.getCno();
            Integer grade = sc.getGrade();

            // 获取学生姓名和课程名称
            String sName = studentRepository.findBySno(sno).getName();
            String cName = courseRepository.findByCno(cno).getName();

            // 创建课程信息字符串
            String courseMsg = cName + "，成绩为：" + grade;

            // 如果该学生还未存在于学生列表中，初始化空的课程列表
            if(!scMsgMap.containsKey(sName)){
                scMsgMap.put(sName, new ArrayList<>());
            }
            // 将课程信息添加到该学生的课程列表中
            scMsgMap.get(sName).add(courseMsg);
        }

        // 准备最终的展示消息列表
        List<String> scMsgList = new ArrayList<>();
        for (Map.Entry<String, List<String>> entry : scMsgMap.entrySet()) {
            String studentMsg = entry.getKey() + " 选了以下课程：";
            scMsgList.add(studentMsg);

            // 添加该学生的每一门课程
            for (String courseMsg : entry.getValue()) {
                scMsgList.add("  - " + courseMsg);
            }
            scMsgList.add("\n");
        }


        return scMsgList;
    }
}
